#include <iostream>
using namespace std;


class myStr
{
private:
    char* data;
    int length=0;
    int* next;
    int* nextVal;

public:
    myStr(const char*);
    myStr();
    ~myStr();
    // 其他可以考虑的构造函数
    // myStr(const int&);
    // myStr(const myStr&);
    int Index(myStr s, myStr T, int pos);
    void print();
    void kmp_next();
    void kmp_nextVal();
    void printNext();
    void printNextVal();

    friend bool replaceStr(myStr&, const int&, const myStr&, const myStr&);
    friend int kmpMatch(const myStr&, const myStr&);
    friend int simpleMatch(const myStr&, const myStr&);
};


struct matrixNode//结构体数组中的每一个元素
{
    int row;//这个元素在原本的矩阵中的行号
    int col;//这个元素在原本的矩阵中的列号
    int value;//元素的值
};


class myMatrix
{
private:
    matrixNode* nodeList;//用来压缩矩阵的结构体数组
    int rowNum;//稀疏矩阵的行数
    int colNum;//稀疏矩阵的列数
    int nodeNum;//稀疏矩阵的元素数

public:
    myMatrix(const int&, const int&, const int&, const int*);
    ~myMatrix();
    //建议加入的构造函数
    myMatrix();
    myMatrix(const myMatrix&);

    void printMatrix();
    void FastTransposeSMatrix(myMatrix&);
};
bool compare(matrixNode a,matrixNode b);





